約 2,452,275 件
https://w.atwiki.jp/drupal/pages/112.html
Rulesモジュール 概要 http //drupal.org/project/rules 標準のTriggerモジュールを、もっと強力で柔軟にした感じのモジュールです。アクションやイベントをかなり細かく指定できます。 drupal.orgでの説明 Rulesモジュールは、サイト管理者が、(reactiveまたはECA rulesとして知られている)発生するイベントをベースにした、条件付きで実行されるアクションを定義できるようにします。これは、コアのTriggerモジュールの多くの機能を置き換えるものであり、また、workflow-ngモジュールの後継でもあります。 ユーザに重要な変更について知らせるために、カスタマイズしたメールを送信する 柔軟なコンテンツ公開ワークフローを構築する カスタマイズしたリダイレクション、システムメッセージ、パンくずリストなどを作成する 他いろいろ... 他モジュールはRulesモジュールのAPIを使って、デフォルトのルールと同じように、ユーザがカスタマイズ可能な新しいイベント、条件、アクション、ルールセットを提供できます。ユーザは内蔵のインポート/エクスポート機能を使って、カスタマイズしたものを共有することもできます。 柔軟なスケジューリングシステム モジュール化された入力評価システム - 例えば、Tokenモジュールと全てのアクションの使用。 このモジュールはサイトパフォーマンスを考慮して開発されたので、ルールの評価を高速化するために各種のキャッシュ・ルーチンを利用しています。 インストール時の注意 アクション内でtokenの置換を行いたいときは、Tokenモジュールの最新リリース(6.x-1.12以降)をインストールしてください。5.xバージョンの方はworkflow-ngをご覧ください。Rulesモジュールは、workflow-ngを改良した6.x用バージョンです。Rulesはworkflow-ngからのアップグレードをサポートしています、UPGRADE.txtをご覧ください。 便利なリンク Rulesをサポートしているモジュール ディスカッションと使い方の質問のためのグループ 他モジュールのRules連携 開発者のブログ 使い始めるにはドキュメントをご覧ください。質問をする前にFAQをお読みください。 github上で開発しています、これはDrupal.orgのCVSと自動的に同期されています。 スレでの話題 RulesとTrigger 427 名前:nobodyさん:2009/07 /09(木) 11 03 53 ID ??? RulesはTriggerを拡張したものという認識で間違ってない? 428 名前:nobodyさん:2009/07 /09(木) 11 31 14 ID ??? 427 ない。もっと色々できるようになってる。 429 名前:nobodyさん:2009/07 /09(木) 11 38 02 ID ??? つーことはTriggerで設定できることはRulesでも全部できるの? 430 名前:nobodyさん:2009/07 /09(木) 11 55 09 ID ??? 429 全部比べた訳じゃないけど、ほぼ出来ると思う。 出来ないのがあったらTriggerとRulesを同時に使えばいい。 431 名前:nobodyさん:2009/07 /09(木) 12 36 22 ID ??? 430 なるほど、納得がいきました。ありがとう。 ノード更新時にcronを実行 548 :nobodyさん:2010/05/15(土) 18 44 14 ID ??? あのさーちょっと前からDrupalってのを使い始めたんだけど気が付いちゃったんだよね? タグを付けた後でもタグクラウドに出てこないの! なーんか調べてみたらcronっての?が必要みたいなわけ でも、一々手動でcronするってのは人クロン(一苦労のダジャレよ、わかる?)っしょ? サーバーでは何時間おきにcronしてくれる設定ってのもあるみたいなんだけど じゃあその間はタグの更新とか確認できないってわけ? なにそれー!ってことで聞きたいんだけど ノードを更新したときに自動的にcronしてくれるようなモジュールってアリっすか? 549 :nobodyさん:2010/05/15(土) 20 00 54 ID ??? Rulesでノード更新時にPHPコードを実行しろよボケ 550 :nobodyさん:2010/05/15(土) 21 25 00 ID ??? hook_nodeapiでcronを呼び出すだけなら自分でモジュール書いても数行だな。 551 :nobodyさん:2010/05/16(日) 00 08 33 ID ??? 548だけど 549、 550、「日本語でおk」 えーとなになに? よく分かんないんだけど、つまり、Rulesモジュールで 「新しいコンテンツを保存した後」や「既存のコンテンツを更新した後」で「独自のPHPを実行」で、 そこのコードにDrupalのcron.phpの中身をコピペ( ?のところは抜きで)して置けばいいわけ? やってみたけど、上手く行ったぞこるぁ! コンテンツを更新してレポートでcronの実行状況をみたら「前回の実行10秒前」みたいになってたぞ! あと、貧乏人のためのcronモジュールで6時間ごとに設定したぞこるぁ! 一発で上手くいくと逆に怖いじゃん これで良いわけ? 552 :nobodyさん:2010/05/16(日) 00 28 18 ID ??? cron.phpの中身をコピペってより、 drupal_cron_run(); だけでいいんだけどね CCKのフィールドAを変更して保存したら、自動的にフィールドBの値を変える 644 :nobodyさん:2010/06/22(火) 19 22 36 ID ??? CCKのフィールドAを変更して保存したら、自動的にフィールドBの値を変える、 というようなことはモジュールで実現できるでしょうか。 Drupal初心者ですみません。 645 :nobodyさん:2010/06/22(火) 22 16 15 ID ??? 644 Rulesで多分できる。 条件はField has changed, アクションはPopulate a fieldあたりで。 もしくはhook_nodeapiを使って自分で書くか。 646 :nobodyさん:2010/06/23(水) 09 56 18 ID ??? 645 ありがとうございます! トライしてみます。 647 :nobodyさん:2010/06/23(水) 19 11 15 ID ??? 645 Rulesでできました! ありがとう。 ちょっと悩んだところがあったので一応書いときます。 1.Eventは「After updating existing content」かと思ったら 「Content is goint go to saved」じゃないとダメだった。 2.Actionで「Populate a field」を選んで、変更後の値を設定 する画面で、ドロップダウンやチェックボックスなどの選択肢 はなぜか設定できなかった。 いったん普通のテキストフィールドにして変更値を設定し、 その後元に戻したらOKだった。 以上、お世話になりました〜 648 :nobodyさん:2010/06/23(水) 19 13 31 ID ??? 647 ×Content is goint go to saved ○Content is going to be save でした・・・ 便利すぎ 729 名前:nobodyさん:2009/06 /10(水) 14 58 00 ID ??? Rulesはじめて使ったら便利すぎて吹いたw これはデフォで入ってないとダメだろ
https://w.atwiki.jp/drupal/pages/60.html
Node import モジュール 概要 http //drupal.org/project/node_import データをCSVやTSVファイルなどからまとめてインポートすることが出来ます。 特徴 ノード、ユーザ、ボキャブラリー、タームをインポート CCKモジュールで作成した独自フィールドのデータにも対応 注意事項 データベーステーブルの追加 node_import_status node_import_tasks 対応バージョン Drupal 5以降 リンク Node import | Drupal Tips - FLAT FLOOD -
https://w.atwiki.jp/drupal/pages/103.html
ベストプラクティス ベストプラクティス 以下は http //drupal.org/best-practices の日本語訳です。 There is no site that is so small that it is not important to someone. - Steven Peck CMSのセットアップに時間を投資するつもりであれば、いくつかの単純なベストプラクティスに従うことによって、その投資を守るようにすべきです。これらのガイドラインは、単なる提案です。それがあなたのサイトにとって適切かどうかを決めるのは、あなた次第です。 以下のリストには、いくつかの簡単なポインタも含まれています(より詳しい情報は、このページの下部にある記事のリストを参照してください) サイトを設計しよう。Drupalは、あなたのサイト構築を助ける素敵なツールセットを提供しますが、依然として設計は必要です。よくできたワイヤーフレームと適切な設計で、将来の重大な考え違いや問題を避けることができます。 将来の計画を立てよう。Drupalのメジャーバージョンのリリースがあるごとに、あなたのサイトを再訪して、再評価しなければなりません。これは、絶対にアップグレードしなければならないという意味ではありませんが、おおよそ12〜24ヶ月ごとに、アップグレードの評価と計画をすべきです。 コミュニティに関わろう。これは、開発の傾向を理解する助けになります。また、他人を助けることによって、あなた自身が抱えている問題を解決するクールなアイデアを思い付くかもしれません。 サイトをバックアップしよう。データベースとWebサーバ上のファイルの両方をバックアップしましょう。そしてバックアップをテストしましょう! テストしないままでは、正しくバックアップしているかどうか分からないのです。 PHPスニペットをテストしよう。Drupalは、ブロックでPHPコードを使用する場合に、大きな力と柔軟性を提供しています。残念ながら、文字を間違えたりセミコロンを忘れたりすると、PHPは壊れてしまいます。するとDrupalは、他のページのリクエストのときでもその壊れたコードを評価しようとします。それでPHPインタプリタが詰まり、それによってサイト全体が壊れてしまいます。幸いなことに、これにはとても単純で簡単な解決策があります。コードを書いたりテストするのを、管理 ブロックのページ内でする代わりに、コンテンツの作成をクリックし、新しくストーリーかページのノードを作ってください。PHP入力書式を使用して、コードを書き、プレビューしてコードをデバッグしてください。コードがちゃんと動くと満足できたら、そのコードをブロック内にコピー&ペーストしましょう。 以下のリンクでは、初級から中級のベストプラクティスを扱っています。より高度な、プログラマ向けのベストプラクティスを探している人は、Programming Best Practicesのページをどうぞ。 テストサイトを使おう (日本語訳) サイトを公開する コアをハックしない (日本語訳) アクセシビリティとDrupal テストサイトを使おう 以下は http //drupal.org/node/22282 の日本語訳です。 ローカルのテストシステムを簡単にセットアップするためのプログラム(XAMPP、MAMP、Apache2Triad)がたくさんあります。サイトをいじったり、バックアップをテストしたり、本番サイトをリストアするために、テストサイトを一つは準備すべきです。テストサイトは、本番のデータをコピーして準備しましょう。サイトの保存の仕方をフォーラムで尋ねる必要はないですよね。一生懸命作ったサイトですから、それが消えてしまうと悔しくてたまらないはずです。 決して実際の本番サイトで開発やテストは行わないでください。Drupalは素早く簡単にインストールできます。最初は常にテストサイトでテストしましょう。 バックアップが動くかテストして、サイトの復元方法が分かっているか確認しましょう。お望みなら、テストシステムはローカルのデスクトップでもできます。サイトがダウンしたときに、ファイルをなくしたり、どう復元すればいいのか分からないという痛い目には遭いたくないでしょう。 本番サイトを危険にさらす前に、サイトのアップグレード手順をテストして、取るべきステップを文書化しましょう。ドキュメントは、必要であれば同じプロセスを繰り返すのにも役立ちます。テストはSimpletestで出来ます。 テストサイトのインストールについての詳細は、開発環境のセットアップと、getting startedセクションを参照してください。InstallationのSpecial casesサブセクションには、本番サイトをテスト/開発環境にコピーする方法を示したいくつかの特定の例が出ています。
https://w.atwiki.jp/drupal/pages/89.html
テーマ関連Tips テーマ関連Tips リンク ベース向けテーマ テーマのコーディング規約 ユーザのログイン状態でCSSを出し分ける(6.x) ページタイトルの"|"を変更する(6.x) リンク Starter Themes Standard Drupal core styles and classes Sub-theme structure and inheritance ベース向けテーマ Zen Clean Basic テーマのコーディング規約 以下は http //drupal.org/node/1965 の日本語訳です。 テーマの作者は、プログラマがあらゆるプロジェクトでするように、きれいで、よく構造化されたコードを書くように注意しなければなりません。そうすることで、コードがより読みやすく、理解しやすく、メンテナンスしやすいものになります。異なる組織には異なる規約があるでしょうが、普通はDrupalの標準に従うことがベストです。共同作業したり援助を求める際の助けにもなります。 インデントにはスペース2つを使用し、タブは使用しません(これはDrupalのコーディング標準と合わせたもので一貫性を保ちます) 長いHTMLブロックの開始タグと終了タグのインデントを揃えてください PHPとHTMLのインデントを区別してください。 こうではなく ... ?php if ($header) ? div id="header" ?php print $header; ? /div ?php endif; ? ... こうする ... ?php if ($header) ? div id="header" ?php print $header; ? /div ?php endif; ? ... このように異なるインデントで定義することで、対応する開始タグと終了タグを見つけやすくなります。 テンプレート内では、PHP中のHTMLよりも、HTML中のPHPを使ってください。たとえば、 こうではなく ?php if (!$page) { print " h2 a href=\"$node_url\" $title /a /h2 "; } if ($submitted) { print " span class=\"submitted\" $submitted /span "; } ? こうする ?php if (!$page) ? h2 a href=" ?php print $node_url; ? " ?php print $title; ? /a /h2 ?php endif; ? ?php if ($submitted) ? span class="submitted" ?php print $submitted; ? /span ?php endif; ? 結局のところ、PHPはHTML埋め込み型のスクリプト言語であり、あべこべにすべきではありません。 論理層はプレゼンテーション層と切り離してください。 こんなのを見たことがあるかもしれません Price ?php print $price; ? Tax ?php print $price * 0.075; ? 計算部分はデータのプレゼンテーションを始める前にコードに移動させてください。スクリプトのビジネスロジック部分は次のようになります ?php $tax = $price * 0.075; ? そしてプレゼンテーション部分は Price ?php print $price; ? Tax ?php print $tax; ? PHPのprintステートメントの終わりには必ずセミコロンを置いてください ?php print $tax; ? -- YES ?php print $tax ? -- NO PHPコードの部分に関する詳細はDrupalコーディング標準に従ってください。 ユーザのログイン状態でCSSを出し分ける(6.x) ログインユーザと匿名ユーザでCSSファイルを切り替えたい場合、phptemplate_preprocess_page()に以下のように書くことでCSSを出し分けることができます。ユーザのログイン状態は$logged_inで判別します。 function phptemplate_preprocess_page( $vars) { if ($vars[ logged_in ]) { drupal_add_css(path_to_theme() . /login-user.css , theme ); } else { drupal_add_css(path_to_theme() . /anonymouse.css , theme ); } $vars[ styles ] = drupal_get_css(); } ページタイトルの"|"を変更する(6.x) ページタイトルを変更するには$head_titleを上書きします。コンテンツタイプごとに変更したり、もっと細かい調整をしたい場合はPage Titleモジュールがおすすめです。 function phptemplate_preprocess_page( $vars) { $vars[ head_title ] = str_replace( | , - , $vars[ head_title ]); }
https://w.atwiki.jp/drupal/pages/111.html
System Table Cleanerモジュール 概要 http //drupal.org/project/system_table_cleaner drupal.orgでの説明 このモジュールは高度なパワーユーザ専用です!私たちはこのモジュールの誤用・悪用について責任は持てません!You have been warned! 便益 モジュールをアンインストールしてもそのモジュールはsystemテーブルからは削除されません。しばらく経つと、このテーブルは(インストールしたけど削除したモジュールで)増加していきます。System Table Cleanerは、この余計なデータを削除することで、この問題を修正します。 詳細 systemテーブルは、テーマおよびモジュールについての情報をバージョン情報と共に保持しています。このモジュールは、fileテーブル中に存在しない全モジュールに対して、systemテーブルからその行を削除します。最大の効果を得るには、使用する予定のない全テーマをアンインストールしてください。 適切にアンインストールされなかったモジュールのsystemテーブルのデータを削除すると、古いデータベーステーブルと変数が残ってしまうかもしれません。バージョン情報の不足は、インストールスクリプトが失敗する原因になるかもしれません。モジュールのメンテナは、このモジュールのせいで起きるダメージに対して責任を持てません。 注意 このモジュールは、他モジュールの変数またはテーブルをアンインストールしたりクリーンアップしたりはしません。適切にアンインストールされたモジュールのみを削除するのが賢明です。モジュールが適切にアンインストールされなかった場合、可能な解決策の一つは、そのモジュールを再インストールして、それからアンインストールすることです。 Drupal 7 この機能はDrupal 7に含まれているので、このモジュールはDrupal 7には移植されません。 現在このモジュールはまだテスト中です。このモジュールをインストールおよび使用する前には、データベースをバックアップしてください。Report all bugs and/or success with this module このモジュールはMGParisiによってメンテナンスされています。
https://w.atwiki.jp/drupal/pages/116.html
Content Accessモジュール 概要 http //drupal.org/project/content_access drupal.orgでの説明 もう一つのノードアクセス・モジュール。 このモジュールは、コンテンツタイプの権限をロールまたは投稿者で管理できるようにします。それぞれのコンテンツタイプに対して、閲覧・編集・削除の権限を指定できます。オプションで、コンテンツ単位のアクセス制限も有効にでき、各コンテンツのノードに対するアクセスをカスタマイズすることができます。 具体的には 適切なデフォルト値を持っているので、特に何も設定する必要なく使い始めることができます 希望通りになる柔軟性があります。柔軟なアクセス制御リスト(ACL)と同じように、コンテンツタイプ単位での設定、コンテンツノード単位での設定が可能です。 再実装せずに既存の機能を再利用しています。ACLモジュールをインストールすると、コンテンツノード単位でユーザのアクセスコントロールを設定できるようになります。さらに、このモジュールはworkflow-ng / rulesで使える条件とアクションを提供します。これにより条件ベースのアクセス権限を設定することができるようにもなります。 本当に必要な権限は登録済のものだけなので、登録済のコンテンツノードへの権限の付与に最適化しています。これはサイトのパフォーマンスにとって重要なことです。 アクセス制御をする重要なモジュールなので、例えば、すべてが確実に動くことを保証するために、たくさんのsimpletestを用意しています。 このように、このモジュールは簡単に使え、それでいて本当にきめ細かい権限を設定できるのです! Drupal 6用バージョンの新機能 このモジュールは、Drupalに組み込まれている権限機能をできるだけ尊重し、使用するようにしています。このモジュールが提供するアクセス制御設定は、それらを考慮しており、コンテンツタイプまたはコンテンツノードに対する本当に実用的なアクセス制御設定についての分かりやすい表示を提供します―それを一つの画面で! Drupal 6用バージョンについての詳細はこちらをご覧ください。
https://w.atwiki.jp/drupal/pages/74.html
Kabuki Projectメイン kabuki.css /* $Id zen.css,v 1.14.2.1 2009/02/13 07 46 04 johnalbin Exp $ */ /* * ZEN STYLES * * This is an example stylesheet. Sub-themes should NOT include the zen/zen.css * file, but instead copy this CSS to their own stylesheets. * * In this stylesheet, we have included all of the classes and IDs from this * theme s tpl.php files. We have also included many of the useful Drupal core * styles to make it easier for theme developers to see them. * * Many of these styles are over-riding Drupal s core stylesheets, so if you * remove a declaration from here, the styles may still not be what you want * since Drupal s core stylesheets are still styling the element. See the * drupal6-reference.css file for a list of all Drupal 5.x core styles. * * In addition to the style declarations in this file, other Drupal styles that * you might want to override or augment are those for * * Book Navigation See line 74 of Zen s drupal6-reference.css file * Forum See line 197 of Zen s drupal6-reference.css file * Menus See line 667 of Zen s drupal6-reference.css file * News Aggregator See line 20 of Zen s drupal6-reference.css file * Polls See line 287 of Zen s drupal6-reference.css file * Search See line 320 of Zen s drupal6-reference.css file * User Profiles See line 945 of Zen s drupal6-reference.css file */ /** body **/ body { margin 0; padding 10px; } #page { } #page-inner { } /** header **/ #header { } #header-inner { } #logo-title /* Wrapper for logo, website name, and slogan */ { } #logo /* Wrapper for logo */ { margin 0 10px 0 0; padding 0; } #logo-image /* The actual logo image */ { } h1#site-name, div#site-name /* The name of the website */ { margin 0; font-size 2em; line-height 1.3em; } #site-name a link, #site-name a visited { color #000; text-decoration none; } #site-name a hover { text-decoration underline; } #site-slogan /* The slogan (or tagline) of a website */ { } #header-blocks /* Wrapper for any blocks placed in the header region */ { } /** main (container for everything else) **/ #main { } #main-inner { } /** content **/ #content { } #content-inner { } #mission /* The mission statement of the site (displayed on homepage) */ { } #content-top /* Wrapper for any blocks placed in the "content top" region */ { } #content-header /* Wrapper for breadcrumb, title, messages, tabs, and help */ { } .breadcrumb /* The path to the current page in the form of a list of links */ { padding-bottom 0; /* Undo system.css */ } h1.title, /* The title of the page */ h2.title, /* Block title or the title of a piece of content when it is given in a list of content */ h3.title /* Comment title */ { margin 0; } div.messages /* Important messages (status, warning, and error) for the user */ { } div.status /* Normal priority messages */ { } div.warning, tr.warning /* Medium priority messages */ { /* border 1px solid #f0c020; */ /* Drupal core uses 1px solid #f0c020 */ } div.error, tr.error /* High priority messages. See also the .error declaration below. */ { } div.tabs /* See also the tabs.css file. */ { } .help /* Help text on a page */ { margin 1em 0; } .more-help-link /* Link to more help */ { font-size 0.85em; text-align right; } #content-area /* Wrapper for the actual page content */ { } .pager /* A list of page numbers when more than 1 page of content is available */ { clear both; margin 1em 0; text-align center; } .pager a, .pager strong.pager-current { padding 0.5em; } .feed-icons /* The links to the RSS or Atom feeds for the current list of content */ { margin 1em 0; } #content-bottom /* Wrapper for any blocks placed in the "content bottom" region */ { } /** navbar **/ #navbar { } #navbar-inner { } #search-box /* Wrapper for the search form */ { } #edit-search-theme-form-1-wrapper label /* Label that says "Search this site " */ { display none; } #primary /* Primary links */ { } #secondary /* Secondary links */ { } /** sidebar-left **/ #sidebar-left { } #sidebar-left-inner { } /** sidebar-right **/ #sidebar-right { } #sidebar-right-inner { } /** footer **/ #footer { } #footer-inner { } #footer-message /* Wrapper for the footer message from Drupal s "Site information" and for any blocks placed in the footer region */ { } /** closure **/ #closure-blocks /* Wrapper for any blocks placed in the closure region */ { } /** Drupal nodes **/ .node /* Node wrapper */ { } .node-inner /* Additional wrapper for node */ { } .sticky /* A sticky node (displayed before others in a list) */ { } .node-unpublished /* Unpublished nodes */ { /* background-color #fff4f4; */ /* Drupal core uses a #fff4f4 background */ } .node-unpublished div.unpublished, /* The word "Unpublished" displayed beneath the content. */ .comment-unpublished div.unpublished { height 0; overflow visible; color #d8d8d8; font-size 75px; line-height 1; font-family Impact, "Arial Narrow", Helvetica, sans-serif; font-weight bold; text-transform uppercase; text-align center; word-wrap break-word; /* A very nice CSS3 property */ } .node-mine /* A node created by the current user */ { } .node-teaser /* A node displayed as teaser */ { } /* All nodes are given a node-type-FOO class that describes the type of * content that it is. If you create a new content type called * "my-custom-type", it will receive a "node-type-my-custom-type" class. */ .node-type-page /* Page content node */ { } .node-type-story /* Story content node */ { } .node h2.title /* Node title */ { } .marker /* "New" or "Updated" marker for content that is new or updated for the current user */ { color #c00; } .node .picture /* The picture of the node author */ { } .node.node-unpublished .picture, .comment.comment-unpublished .picture { position relative; /* Otherwise floated pictures will appear below the "Unpublished" text. */ } .node .meta /* Wrapper for submitted and terms data */ { } .node .submitted /* The "posted by" information */ { } .node .terms /* Node terms (taxonomy) */ { } .node .content /* Node s content wrapper */ { } .node div.links /* Wrapper for node links */ { margin 1em 0; } ul.links /* Taxonomy links, node links, comment links */ { margin 0; padding 0; } ul.links.inline { display inline; } ul.links li { display inline; list-style-type none; padding 0 0.5em; } .preview .node /* Preview of the content before submitting new or updated content */ { /* background-color #ffffea; */ /* Drupal core uses a #ffffea background */ } /** Drupal comments **/ #comments /* Wrapper for the list of comments and its title */ { margin 1em 0; } #comments-title /* Heading for the list of comments */ { } .comment /* Wrapper for a single comment */ { } .comment-inner /* Additional wrapper for a single comment */ { } .comment-preview /* Preview of the comment before submitting new or updated comment */ { } .comment.new /* A new comment since the user last viewed the page. */ { } .comment.odd /* An odd-numbered comment in the list of comments */ { } .comment.even /* An even-numbered comment in the list of comments */ { } .comment.first /* The first comment in the list of comments */ { } .comment.last /* The last comment in the list of comments */ { } .comment-unpublished /* Unpublished comments */ { /* background-color #fff4f4; */ /* Drupal core uses a #fff4f4 background */ } .comment-unpublished div.unpublished /* The word "Unpublished" displayed beneath the content. See also the div.unpublished declaration in the node section above. */ { } .comment-published /* Published comments */ { } .comment-by-anon /* A comment created by an anonymous user */ { } .comment-by-author /* A comment created by the node s author */ { } .comment-mine /* A comment created by the current user */ { } .comment h3.title /* Comment title */ { } .new /* "New" marker for comments that are new for the current user */ { color #c00; } .comment .picture /* The picture of the comment author */ { } .comment .submitted /* The "posted by" information */ { } .comment .content /* Comment s content wrapper */ { } .comment .user-signature /* The user s signature */ { } .comment div.links /* Wrapper for comment links. See also the ul.links declaration in the node section above. */ { margin 1em 0; } .indented /* Nested comments are indented */ { /* margin-left 25px; */ /* Drupal core uses a 25px left margin */ } .preview .comment /* Preview of the comment before submitting new or updated comment */ { /* background-color #ffffea; */ /* Drupal core uses a #ffffea background */ } /** Drupal blocks **/ .block /* Block wrapper */ { margin-bottom 1em; } .block.region-odd /* Zebra striping for each block in the region */ { } .block.region-even /* Zebra striping for each block in the region */ { } .block.odd /* Zebra striping independent of each region */ { } .block.even /* Zebra striping independent of each region */ { } .region-count-1 /* Incremental count for each block in the region */ { } .count-1 /* Incremental count independent of each region */ { } .block-inner /* Additional wrapper for block */ { } .block h2.title /* Block title */ { } .block .content /* Block s content wrapper */ { } #block-aggregator-category-1 /* Block for the latest news items in the first category */ { } #block-aggregator-feed-1 /* Block for the latest news items in the first feed */ { } #block-block-1 /* First administrator-defined block */ { } #block-blog-0 /* "Recent blog posts" block */ { } #block-book-0 /* "Book navigation" block for the current book s table of contents */ { } #block-comments-0 /* "Recent comments" block */ { } #block-forum-0 /* "Active forum topics" block */ { } #block-forum-1 /* "New forum topics" block */ { } #block-menu-2 /* "Primary links" block */ { } #block-node-0 /* "Syndicate" block for primary RSS feed */ { } #block-poll-0 /* "Most recent poll" block */ { } #block-profile-0 /* "Author information" block for the profile of the page s author */ { } #block-search-0 /* "Search form" block */ { } #block-statistics-0 /* "Popular content" block */ { } #block-user-0 /* "User login form" block */ { } #block-user-1 /* "Navigation" block for Drupal navigation menu */ { } #block-user-2 /* "Who s new" block for a list of the newest users */ { } #block-user-3 /* "Who s online" block for a list of the online users */ { } /** Drupal boxes **/ /* Wrapper for Comment form, Comment viewing options, Menu admin, and * Search results. */ .box /* Wrapper for box */ { } .box-inner /* Additional wrapper for box */ { } .box h2.title /* Box title */ { } .box .content /* Box s content wrapper */ { } /** Miscellaneous Drupal styles **/ .error /* Errors that are separate from div.messages status messages (see above.) */ { /* color #e55; */ /* Drupal core uses a #e55 background */ } .warning /* Warnings that are separate from div.messages status messages (see above.) */ { /* color #e09010; */ /* Drupal core uses a #e09010 background */ } .more-link /* Aggregator, blog, and forum more link */ { text-align right; } #user-login-form /* Drupal s default login form */ { text-align left; } tr.even /* Some tables have rows marked even or odd. */ { /* background-color #eee; */ /* Drupal core uses a #eee background */ } tr.odd { /* background-color #eee; */ /* Drupal core uses a #eee background */ } li a.active /* The active item in a Drupal menu */ { color #000; } /** Drupal forms **/ .form-item, /* Wrapper for a form element (or group of form elements) and its label */ .form-checkboxes, .form-radios { margin 1em 0; } .form-item input.error, /* Highlight the form elements that caused a form submission error */ .form-item textarea.error, .form-item select.error { border 2px solid #c00; } .form-item label /* The label for a form element */ { display block; font-weight bold; } .form-item label.option /* The label for a radio button or checkbox */ { display inline; font-weight normal; } .form-required /* The part of the label that indicates a required field */ { color #c00; } .form-item .description /* The descriptive help text (separate from the label) */ { font-size 0.85em; } .form-checkboxes .form-item, /* Pack groups of checkboxes and radio buttons closer together */ .form-radios .form-item { margin 0.4em 0; } .form-submit /* The submit button */ { } .container-inline div, .container-inline label /* Inline labels and form divs */ { display inline; } .tips /* Tips for Drupal s input formats */ { margin 0; padding 0; font-size 0.9em; } /** OpenID **/ /* The default styling for the OpenID login link seems to assume Garland s * styling of list items. */ #user-login-form ul /* OpenID creates a new ul above the login form s links. */ { margin-bottom 0; /* Position OpenID s ul next to the rest of the links. */ } #user-login-form li.openid-link, /* The "Log in using OpenID" links. */ #user-login li.openid-link { margin-top 1em; margin-left -20px; /* Un-do some of the padding on the ul list. */ padding-left 20px; background-position left center; } #user-login-form li.user-link, /* The "Cancel OpenID login" links. */ #user-login li.user-link { margin-top 1em; list-style-type disc; list-style-position outside; } #user-login li.openid-link, /* The OpenID links on the /user form. */ #user-login li.user-link { margin-left -2em; /* Un-do all of the padding on the ul list. */ } /** Drupal admin tables **/ /* We overrode these styles in html-elements.css, but restore them for the * forms on the site. */ form tbody { border-top 1px solid #ccc; } form th { text-align left; padding-right 1em; border-bottom 3px solid #ccc; } form tbody th { border-bottom 1px solid #ccc; } form thead th { text-align left; padding-right 1em; border-bottom 3px solid #ccc; } コメント
https://w.atwiki.jp/drupal/pages/32.html
ココログ等ASP屋のblogからの移行 Q1.ブログ書くのに文字装飾とかはHTMLを手打ちしろって事? A1.確かにインストールしたままの状態では、特別なエディタは付いてきませんので、ブログや他のコンテンツを書くにもHTMLのタグを自分で書く必要があります。しかしFCKeditorモジュールなど各種のWYSIWYGエディタがありますので、それらをインストールすることによりタグを知らなくてもリッチな文章を書くことが出来ます。 Q2.ココログとかMSNのブログとかにある「カテゴリー」ってどうやって表示する? A2.Taxonomy dhtmlモジュールを使うと同様なことが出来ます。 管理画面のメニューから「管理セクション」→「カテゴリ」でブログ用の「分類用語グループ」を作って、それの名前を仮に「ブログのカテゴリー」とすると「管理セクション」→「ブロック」に「ブログのカテゴリー」というブロックが出来ているので、それを有効にして表示させればよいです。(drupal-5.xはTaxonomy Contextモジュールで同様な事ができます。) Q3.他のブログでよく見かける、カレンダーはあるの? A3.カレンダーの日付をクリックすると該当日の記事が読めたりするあのカレンダーですね。 Drupalにもあります。 標準でついてくるarchiveモジュールがそれです。ただし、標準で付いてくるヤツはバグってますのでDrupal-jBox.netにカレンダー(archive)モジュール修正版(Drupal 4.7向け)があるので、こっちのモジュールを有り難く使わせていただきましょう。
https://w.atwiki.jp/drupal/pages/13.html
freelinkingモジュール 概要 所謂WikiNameでDrupal内のコンテンツへのリンクを自動で用意する。 (英大文字英小文字英大文字英小文字で構成する単語) 特徴 該当のコンテンツが存在しない場合はリンク先をクリックすると作成画面になる。 作成コンテンツは指定が可能。ただし、指定できるノードは一種類 注意事項 当たり前だが日本語には対応していない。 対応バージョン Drupal 4.6以降
https://w.atwiki.jp/drupal/pages/100.html
hookの実例 Drupalを使いこなすために重要な要素の一つは、フックを理解することです。Drupalにはコアや拡張モジュールにたくさんのフックが用意されています。モジュールを作成したり、Drupalの動作をちょっと変更したいときには、このフックを呼び出します。しかしフックの数が多すぎて、どのタイミングでどのフックを呼び出すべきか迷ってしまうことも多々あります。そこで、スレに出てきたhookの使い方の実例や、hookを話題にしたレスを抜き出してみました。過去スレを"hook"で検索しただけなので、見落しているものがあるかもしれません。 hookの実例 ユーザ編集画面の項目を削除する(hook_form_alter, 6.x) なるべく早い段階で変数を初期化したい(hook_init, 6.x) ユーザ用コンタクトを無効にする(hook_form_alter, 6.x) フィールドに独自のバリデータを設定したい(hook_validate, 6.x) loadした配列に値を追加したい(hook_nodeapi, 6.x) hookの概要説明 ノードにpathを設定(hook_nodeapi, 6.x) 追加したプロフィール入力欄を無効にしたい(hook_form_alter, 6.x) ユーザ編集画面の項目を削除する(hook_form_alter, 6.x) http //www10.atwiki.jp/drupal/pub/log/1245598345.html#R444 444 名前:nobodyさん:2009/07 /10(金) 15 03 53 ID ??? user/24/editのような編集画面にある 「言語の設定」、「コンタクトの設定」をユーザーに見せたくないのですがこれを 削除するのはどうするのでしょう? user-profile.tpl.phpは編集画面じゃなくてuser/24のプロフィール画面のようですし 446 名前:nobodyさん:2009/07 /10(金) 20 05 04 ID ??? 444 テーマよりモジュールでやった方がいいと思う hook_form_alter()でunset($form[ locale ], $form[ contact ]) function mymodule_form_alter( $form, $form_state, $form_id) { if ($form_id != user_edit $form_id != user_profile_form ) { return; } if (!user_access( administer users )) { unset($form[ locale ], $form[ contact ]); } } こんな感じ? 448 名前:nobodyさん:2009/07 /11(土) 07 17 38 ID ??? 446 自前のモジュール作ればそういうことが出来るのですね unsetとか知らなかったので勉強になります。ありがとうございました。 なるべく早い段階で変数を初期化したい(hook_init, 6.x) http //www10.atwiki.jp/drupal/pub/log/1245598345.html#R760 760 名前:nobodyさん:2009/08 /03(月) 17 01 16 ID ??? staticな変数値をどこかに書いておきたいんだけど、どこがいいって のはあるでしょか。読み込み順で動作が変わるのであれば、 ブートストラップフェーズの近くで動作するようなところに置いておいた 方がいいのかなぁ・・・。 CCKデータと連動させる、独自テーブルの構成表のarrayを置いておき たいだけなのです。重い処理になるので、必要なデータだけ、CCK構成の データじゃなくて独自のテーブルに一行一コンテンツで保存しておきたい、 んで、この処理が各イベントフックで使われるので、共有の配列どこかに 置いておきたいなー、と。 763 名前:nobodyさん:2009/08 /03(月) 19 40 58 ID ??? 760 普通はhook_initでいいと思うけど、それより前にしたいなら モジュールファイルの上の方にグローバルで書いとけばいいんじゃない? もしくはその変数を使うモジュール側でinclude_onceするか。 764 名前:nobodyさん:2009/08 /04(火) 00 21 51 ID ??? 763 サンクス! init のフックつけたモジュールに、グローバルで入れてみる! ユーザ用コンタクトを無効にする(hook_form_alter, 6.x) http //www10.atwiki.jp/drupal/pub/log/1250415957.html#R287 287 名前:nobodyさん:2009/08 /30(日) 20 16 27 ID ??? コンタクトモジュールなんですけど サイト用コンタクトのみ使用して ユーザー用コンタクトは使用できないように設定したいのですが 何か追加モジュール使えば設定可能ですか? 288 名前:nobodyさん:2009/08 /30(日) 21 14 36 ID ??? 287 コンタクトフォームの環境設定(admin/build/contact/settings)で パーソナルコンタクトフォームのチェックを外す。これだけだと ユーザが自分で有効にできてしまうので、hook_form_alterで unset($form[ contact ])する。 webformあたりでサイト用フォームだけ作った方が簡単かも。 289 名前:nobodyさん:2009/08 /31(月) 00 48 14 ID ??? 288 そうやれば良いのか 分からないからユーザーのはCSSで消してた フィールドに独自のバリデータを設定したい(hook_validate, 6.x) http //www10.atwiki.jp/drupal/pub/log/1250415957.html#R290 290 名前:nobodyさん:2009/08 /31(月) 11 48 48 ID ??? D6でCCKを使って郵便番号のフィールドを作っています yubin1とyubin2というフィールドを「整数」で作ってそれぞれ3桁と4桁にしたいのですが フィールド設定に最小値・最大値というのはあっても桁数の設定は無いので「整数」ではなく「テキスト」で作るべきなのでしょうか?(「テキスト」だと桁数も幅も設定できる) 293 名前:nobodyさん:2009/08 /31(月) 12 28 32 ID ??? モジュールで hook_validate イベントの処理を作って、 そこに書く方法もあるよ。その場合、ほかの content-type の validate イベントも拾ってくるから、処理の最初で type を拾って必要なもののみ検証するようにする必要が あるけど。 294 名前:nobodyさん:2009/08 /31(月) 13 51 28 ID ??? Drupal本見たらhook_validateの使い方が書いてあったのでそっち参考にやってみます ありがとうございました loadした配列に値を追加したい(hook_nodeapi, 6.x) http //www10.atwiki.jp/drupal/pub/log/1250415957.html#R225 225 名前:nobodyさん:2009/08 /27(木) 19 14 30 ID gDlr5dO4 ところで・・・・ _load で select した後に、node に、一行一コンテンツと ならない値をつけてあげたいんだけど。node のメンバを _load 直後のイベントで増やしてあげることできないでしょか。 228 名前:nobodyさん:2009/08 /27(木) 21 12 58 ID ??? 225 hook_nodeapiかhook_load。でも質問が意味不明。 232 名前:nobodyさん:2009/08 /27(木) 23 41 54 ID ??? 228 すいません、node に、DBの列にない値の枠を作ってあげたいんです。 233 名前:nobodyさん:2009/08 /28(金) 00 32 23 ID ??? 232 hook_loadでいいんじゃね? 使い方は http //api.drupal.org/api/function/node_example_load/6 393 名前:nobodyさん:2009/09 /10(木) 14 01 46 ID ??? 225ですが、やっと node に好きな値を突っ込む方法がわかりましたので自己レス。 upload モジュールのコードを参考にすると、hook_nodeapi の load イベントで、 return値[ メンバ ]として空値を返しています。すると、node[ メンバ ]という node 値が 追加されるようで。 node_load では、upload に倣って、type ごとのテーブル内容を呼び出すのみにする ということにしました。 228さん、 233さん、サンクスです。 hookの概要説明 http //www10.atwiki.jp/drupal/pub/log/1250415957.html#R425 425 名前:nobodyさん:2009/09 /12(土) 23 23 28 ID ??? 399 もう一つは、node 、 form 、 view 、theme を軸にした フレームワークとして使う方法。 この方法についてできればもうちょっと詳しく教えて 426 名前:nobodyさん:2009/09 /12(土) 23 39 42 ID ??? 425 俺の知ってる範囲の話ね。うそ多いかもしれんが勘弁してw DrupalでモジュールというPHPスクリプトを作って、それを自分のサイトに登録すると、 hook というDrupal本体のモジュールを連動させる仕組みが動き出す。 hook は他のプラットホームでいうイベント処理。例えば、コンテンツ(node)を呼び出す とき、表示するとき。入力画面(form)を表示するとき、url が呼び出された (menu/rewrite処理)ときなど。 Drupal では、主要な hook ごとに、そのときの処理を自分で書き換えるのに便利な ライブラリが揃っている。例えば、node を呼び出す・保存するときには、node_xxxx って一覧の関数があるし、form を表示するときには、テンプレートの制御下で汎用の 入力欄を設定するためのform API と呼ばれる仕組みが揃っている。form API では、 主要な入力タグの代わりになる定型文が使えるし、自分で新しいタイプの入力欄 (例えば2桁と10桁の組み合わせ会員番号)を追加したい場合は、 widget という hook をつかえば実現できるようになってる。 要するに、Drupal の標準機能のどこからに割り込み処理を書くことで、Drupalの各機能 をカスタマイズしたり新機能を追加したりできるわけ。 427 名前:nobodyさん:2009/09 /13(日) 00 27 20 ID ??? 426 なるほど、hookをいじるのがMVCでのC view、themeをいじるのがVってとこか 参考になったトンクス ノードにpathを設定(hook_nodeapi, 6.x) http //www10.atwiki.jp/drupal/pub/log/1250415957.html#R562 562 名前:nobodyさん:2009/10 /15(木) 01 33 59 ID ??? この時間まで path モジュールと格闘してたのでtips。 URLエイリアスをPHPスクリプトで自動設定したい場合は、 hook_nodeapi の presave イベントで、$node- path に 好きなURL入れてあげれば勝手に設定してくれるよ! ただし、エイリアス欄の内容は上書きされちゃうけど。 追加したプロフィール入力欄を無効にしたい(hook_form_alter, 6.x) http //pc11.2ch.net/test/read.cgi/php/1264987120/145-151 145 :nobodyさん:2010/02/11(木) 20 50 23 ID ??? ぶった切りますが独自に増やしたプロフィール入力欄を ユーザーが後から変更できなくするモジュールはないでしょうか content_profile を使ってみましたがnodeとして記録されるので呼び出しにくいです。 ほかのところで独自に増やしちゃった値をuser_loadをしている関係で なんとかユーザidから配列をひっ張り出せる状態にしておきたいのです。 150 :nobodyさん:2010/02/11(木) 21 56 19 ID ??? 145 function modulename_form_alter( $form, $form_state, $form_id) { if ($form_id == user_profile_form !user_access( administer users )) { $form[ Category1 ][ profile_field1 ][ #attributes ][ disabled ] = disabled ; $form[ Category1 ][ profile_field2 ][ #attributes ][ disabled ] = disabled ; } } 151 :145:2010/02/11(木) 22 16 36 ID ??? 作るしかないって事ですね 試してきます 150ありがとう!